package cn.com.surker.material.service;

import cn.com.surker.dto.main.MaterialWeightQueryDTO;
import cn.com.surker.material.entity.MainMaterialWeight;
import cn.com.surker.material.vo.MainMaterialWeightVo;
import cn.com.surker.spring.RestResultDto;
import cn.com.surker.vo.main.MainMaterialWeightVO;
import cn.com.surker.weight.entity.WeightPicture;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.util.List;

/**
 * @Author lucky
 * @create 2024年10月09 8:36
 * @desc
 */
public interface MaterialWeightBaseService {

    /**
     * 分页查询过磅信息
//     * @param searchVal 检索条件
//     * @param orgId 公司ID
//     * @param supplierId 供应商ID
//     * @param materialId 材料ID
//     * @param weightType 过磅类型 1原材2辅材3商砼退料4砼过磅5登记皮重6原材出售过磅0其它过磅
//     * @param isPrint 是否打印
//     * @param isDisplay 是否显示
//     * @param isBill 是否结算
//     * @param startTime
//     * @param endTime
//     * @param offset
//     * @param limit
//     * @param searchType 0 已完成过磅， 1 未完成过磅
//     * @param carType 车辆类型(类型  1是搅拌车,2是材料车,3是外运车,4是水稳层,5其他,6内转车
     * @return
     */
    IPage findPage(MainMaterialWeightVO materialWeightVO, Integer isCloud,
                   Integer offset, Integer limit);

    IPage findSupplierBillPage(MainMaterialWeightVO materialWeightVO, Integer isCloud,
                               Integer offset, Integer limit);

    /**
     * 根据仓位统计进料数据
     * @return
     */
    List<MainMaterialWeightVo> findStorageWeight(String dbCode, String searchVal, Long supplierId, Long materialId,
               Long storageId, Integer breedType, Integer storageType, String startTime, String endTime);

    /**
     * 查询云端统计数据
     * @param materialWeight
     * @return
     */
    MainMaterialWeightVO findCloudTotalWeightPage(MainMaterialWeightVO materialWeight);

    /**
     * 保存过磅信息
     * @param materialWeight
     * @return
     */
    RestResultDto save(MainMaterialWeight materialWeight);

    /**
     * 修改过磅信息
     * @param materialWeight
     * @return
     */
    RestResultDto update(MainMaterialWeight materialWeight);

    /**
     * 禁用/启用
     * @param id
     * @param status
     * @param remark
     * @param creator
     * @return
     */
    RestResultDto updateStatus(Long id, Integer status, String remark, String creator);

    /**
     * 设置仓位信息
     * @param id
     * @param storageId 仓位ID
     * @param creator
     * @param remark
     * @return
     */
    RestResultDto setStorage(Long id, Long storageId, String creator, String remark);

    /**
     * 设置扣重
     * @param id
     * @param hiddenWeight 暗扣重量
     * @param brightWeight 明扣重量
     * @param creator
     * @param remark
     * @return
     */
    RestResultDto setWeight(Long id, Double hiddenWeight, Double brightWeight, String creator, String remark);

    /**
     * 设置显示
     * @param ids
     * @param startTime
     * @param endTime
     * @param creator
     * @param displayRate 显示扣除比例
     * @param remark
     * @return
     */
    RestResultDto setDisplayRate(String ids, String startTime, String endTime, Double displayRate,
                                 String creator, String remark);

    /**
     * 审核过磅单
     * @param ids
     * @param creator
     * @param remark
     * @param type 0 材料统计审核 1 财务审核
     * @return
     */
    RestResultDto checkWeight(Long orgId, String ids, String creator, String remark, Integer type);

    /**
     * 汽车过磅记录
     * @param dto
     * @return
     */
    IPage<MainMaterialWeightVO> pageData(MaterialWeightQueryDTO  dto);

    /**
     * 根据订单信息，获取图片
     * @param orgId
     * @param code
     * @return
     */
    List<WeightPicture> loadImageList(Long orgId, String code);

    /**
     * 加载过磅照片
     * @param orgId
     * @param id
     * @return
     */
    byte[] loadMaterialImage(Long orgId, Long id);

    /**
     * 统计查询各供应商进料数据
     * @param orgId
     * @param supplierId
     * @param materialId
     * @param type 0地材 1非地材
     * @param searchVal
     * @param startTime
     * @param endTime
     * @return
     */
    List<MainMaterialWeightVO> findCloudTotalSupplier(Long orgId, Long supplierId, Long materialId,
                                                      Integer type, String searchVal, String startTime, String endTime);
}
